package org.hyl.javabase.swing;

import java.lang.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class SwingComponent {
	// �������壬JFrame
	JFrame f = new JFrame("����");
	// ����һ����ť����Ϊָ֮��ͼ��
	// ImageIcon(Image image)
	// ����ͼ����󴴽�һ�� ImageIcon�� Icon�ǽӿڣ�ImageIconʵ���˸ýӿڣ���̬������
	// ����һ����ѡ��ť����Ϊָ֮��ͼ��
	Icon okIcon = new ImageIcon("ico/ok.png");
	JButton ok = new JButton("ȷ��", okIcon);
	// ����һ����ѡ��ť�����´���ѡ��״̬
	// JradioButton ʵ��һ����ѡ��ť���˰�ť��ɱ�ѡ���ȡ��ѡ�񣬲���Ϊ�û���ʾ��״̬��
	// JRadioButton(String text, boolean selected)
	// ����һ������ָ���ı���ѡ��״̬�ĵ�ѡ��ť��
	JRadioButton male = new JRadioButton("��", true);
	JRadioButton female = new JRadioButton("Ů", false);
	ButtonGroup bg = new ButtonGroup();
	// ����һ����ѡ�򣬳���״̬����û��ѡ��״̬
	JCheckBox married = new JCheckBox("�Ƿ��ѻ飿", false);
	String[] colors = new String[] { "��ɫ", "��ɫ", "��ɫ" };
	// ����һ������ѡ���
	// JComboBox(Object[] items)
	// ��������ָ�������е�Ԫ�ص� JComboBox��
	JComboBox<String> colorChooser = new JComboBox<>(colors);
	// ����һ���б�ѡ��򣿣�������������������������
	// JList(Object[] listData)
	// ����һ�� JList��ʹ����ʾָ�������е�Ԫ�ء�
	JList<String> colorList = new JList<>(colors);
	// ����һ��8��20�еĶ����ı���
	JTextArea ta = new JTextArea(8, 20);
	// ����һ��40�еĵ����ı���
	JTextField name = new JTextField(40);

	JMenuBar mb = new JMenuBar();
	JMenu file = new JMenu("�ļ�");
	// JMenu(String s)
	// ����һ���� JMenu�����ṩ���ַ�����Ϊ���ı���
	JMenu edit = new JMenu("�༭");

	Icon newIcon = new ImageIcon("ico/new.png");
	// JMenuItem(String text, Icon icon)
	// ��������ָ���ı���ͼ��� JMenuItem��
	JMenuItem newItem = new JMenuItem("�½�", newIcon);

	Icon saveIcon = new ImageIcon("ico/new.png");
	JMenuItem saveItem = new JMenuItem("����", saveIcon);

	Icon exitIcon = new ImageIcon("ico/exit.png");
	JMenuItem exitItem = new JMenuItem("�˳�", exitIcon);
	JCheckBoxMenuItem autoWrap = new JCheckBoxMenuItem("�Զ�����");

	JMenuItem copyItem = new JMenuItem("����", new ImageIcon("ico/copy.png"));

	JMenuItem pasteItem = new JMenuItem("ճ��", new ImageIcon("ico/paste.png"));

	JMenu format = new JMenu("��ʽ");

	JMenuItem commentItem = new JMenuItem("ע��");

	JMenuItem cancelItem = new JMenuItem("ȡ��ע��");
	// ����һ���Ҽ��˵��������趨�������۷��
	JPopupMenu pop = new JPopupMenu();
	ButtonGroup flavorGroup = new ButtonGroup();
	// ����5����ѡ��ť�������趨�������۷��
	JRadioButtonMenuItem metalItem = new JRadioButtonMenuItem("Metal���", true);
	JRadioButtonMenuItem nimbusItem = new JRadioButtonMenuItem("Nimbus���");
	JRadioButtonMenuItem windowsItem = new JRadioButtonMenuItem("windows���");
	JRadioButtonMenuItem motifyItem = new JRadioButtonMenuItem("motifyItem���");
	JRadioButtonMenuItem classicItem = new JRadioButtonMenuItem("windows������");

	/*------------------����������ִ�н����ʼ����init����-------------------------*/
	public void init() {
		// ����һ��װ�����ı��򡢰�ť��JPanel
		JPanel bottom = new JPanel();
		bottom.add(name);
		bottom.add(ok);
		f.add(bottom, BorderLayout.SOUTH);// ��BorderLayout���ֹ�������������ײ�
		// ����һ��װ��������ѡ�������JCheckBox��JPanel
		JPanel checkPanel = new JPanel();
		checkPanel.add(colorChooser);
		//// ��Ҫ������һ��ButtonGroup�У�ҲҪ������checkPanel��
		// ��ȥ��bg.add(male);bg.add(female); ����ѡ�����Ա�
		// ��ȥ�� checkPanel.add(male);checkPanel.add(female); �������Ա�RadioButton��ʧ
		bg.add(male);
		bg.add(female);
		checkPanel.add(male);
		checkPanel.add(female);
		checkPanel.add(married);
		// ����һ����ֱ���е������Box��ʢװ�����ı���JPanel
		Box topLeft = Box.createVerticalBox();// ����һ�����ϵ�����ʾ��Box
		// ʹ��JScrollPance��Ϊ��ͨ�����JViewPort
		JScrollPane taJsp = new JScrollPane(ta);
		topLeft.add(taJsp);
		topLeft.add(checkPanel);
		// ����һ��ˮƽ���������Box��ʢװtopLeft��colorList
		Box top = Box.createHorizontalBox();
		top.add(topLeft);
		top.add(colorList);
		// ��Top Box������ӵ����ڵ��м�
		f.add(top);
		// ----------���濪ʼ��ϲ˵�����δ�˵���Ӽ�����---------------------
		// ΪnewItem���ÿ�ݼ������ÿ�ݼ�ʱҪʹ�ô�д��ĸ
		newItem.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_MASK));
		newItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ta.append("�û������ˡ��½����˵�\n");
			}
		});
		// Ϊfile�˵���Ӳ˵���
		file.add(newItem);
		file.add(saveItem);
		file.add(exitItem);

		// Ϊexit�˵���Ӳ˵���
		edit.add(autoWrap);
		// ʹ��addSeparator������Ӳ˵��ָ���
		edit.addSeparator();
		edit.add(copyItem);
		edit.add(pasteItem);
		// ΪcommentItem��������ʾ��Ϣ
		commentItem.setToolTipText("���ӳ������ע��������");
		// Ϊformat�˵���Ӳ˵���
		format.add(commentItem);
		format.add(cancelItem);

		// ʹ�����new JMenuItem����-�����ķ�ʽ������Ӳ˵��ָ���
		edit.add(new JMenuItem("-"));
		// ��format�˵���ϵ�eidt�˵��У��Ӷ��γɶ����˵�
		edit.add(format);
		// ��file��edit�˵���ӵ�mb�˵�����
		mb.add(file);
		mb.add(edit);
		// Ϊf�������ò˵���
		f.setJMenuBar(mb);

		// ------���濪ʼ����Ҽ��˵�������װ�Ҽ��˵�-----------------
		flavorGroup.add(metalItem);
		flavorGroup.add(nimbusItem);
		flavorGroup.add(windowsItem);
		flavorGroup.add(classicItem);
		flavorGroup.add(motifyItem);

		pop.add(metalItem);
		pop.add(nimbusItem);
		pop.add(windowsItem);
		pop.add(classicItem);
		pop.add(motifyItem);

		// Ϊ5�����˵������¼�������
		ActionListener flavorListener = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					switch (e.getActionCommand()) {
					case "Metal���":
						changeFlavor(1);
						break;
					case "Nimbus���":
						changeFlavor(2);
						break;
					case "Windows���":
						changeFlavor(3);
						break;
					case "Windows������":
						changeFlavor(4);
						break;
					case "Motif���":
						changeFlavor(5);
						break;
					}
				} catch (Exception ee) {
					ee.printStackTrace();
				}
			}
		};

		// Ϊ5�����˵�������¼�������

		metalItem.addActionListener(flavorListener);
		nimbusItem.addActionListener(flavorListener);
		windowsItem.addActionListener(flavorListener);
		classicItem.addActionListener(flavorListener);
		motifyItem.addActionListener(flavorListener);

		// ���ø÷������������Ҽ��˵�������ʹ���¼����ƣ�
		ta.setComponentPopupMenu(pop);

		// ���ùرմ���ʱ���˳�����
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.pack();
		f.setVisible(true);
		// �����ڲ�����Ƕ�׷��������ǵ��������
	}

	private void changeFlavor(int flavor) throws Exception {
		switch (flavor) {
		// ����Metal���
		case 1:
			UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
			break;
		case 2:
			UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimusLoolAndFeel");
			break;
		case 3:
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			break;
		case 4:
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
			break;
		case 5:
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
			break;
		}
		// ����f�����ڶ��������Լ��ڲ����������UI
		SwingUtilities.updateComponentTreeUI(f.getContentPane());
		// ����mb�˵����Լ��ڲ����������UI
		SwingUtilities.updateComponentTreeUI(mb);
		// ����pop�Ҽ��˵��Լ��ڲ����������UI
		SwingUtilities.updateComponentTreeUI(pop);
	}

	public static void main(String[] args) {
		new SwingComponent().init();
	}
}